package cn.iocoder.yudao.module.reading.framework.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import jakarta.annotation.PostConstruct;

/**
 * 文件服务配置类
 * 用于配置文件服务的行为，特别是URL返回格式
 *
 * @author 李晨
 */
@Slf4j
@Configuration
public class FileServiceConfiguration {

    @Value("${yudao.file.return-relative-path:false}")
    private Boolean returnRelativePath;

    private final Environment environment;

    public FileServiceConfiguration(Environment environment) {
        this.environment = environment;
    }

    /**
     * 初始化文件服务配置
     * 设置系统属性以控制FileClient的行为
     */
    @PostConstruct
    public void initFileServiceConfig() {
        log.info("=== 文件服务配置初始化开始 ===");

        // 打印配置来源信息
        log.info("当前激活的配置文件: {}", String.join(",", environment.getActiveProfiles()));

        // 从Environment中获取配置值进行验证
        String configValue = environment.getProperty("yudao.file.return-relative-path");
        log.info("从Environment获取的配置值: yudao.file.return-relative-path = {}", configValue);
        log.info("@Value注入的配置值: returnRelativePath = {}", returnRelativePath);

        // 检查配置值是否正确注入
        if (returnRelativePath == null) {
            log.warn("配置值returnRelativePath为null，使用默认值false");
            returnRelativePath = false;
        }

        // 设置系统属性，控制S3FileClient返回相对路径还是完整URL
        String systemPropertyValue = returnRelativePath.toString();
        System.setProperty("yudao.file.return-relative-path", systemPropertyValue);

        // 验证系统属性是否设置成功
        String actualSystemProperty = System.getProperty("yudao.file.return-relative-path");
        log.info("设置的系统属性值: {}", systemPropertyValue);
        log.info("实际的系统属性值: {}", actualSystemProperty);

        // 打印其他相关配置
        String minioConfig = environment.getProperty("yudao.static-resource.minio.domain");
        String enableUrlConversion = environment.getProperty("yudao.static-resource.minio.enable-url-conversion");
        log.info("Minio域名配置: {}", minioConfig);
        log.info("URL转换启用配置: {}", enableUrlConversion);

        // 检查配置一致性
        if ("true".equals(systemPropertyValue) && !"true".equals(enableUrlConversion)) {
            log.warn("配置不一致：文件服务返回相对路径({}), 但URL转换未启用({})", systemPropertyValue, enableUrlConversion);
        }

        log.info("文件服务配置初始化完成，返回相对路径模式: {}", returnRelativePath);

        // 额外验证：立即检查系统属性是否生效
        String verifyProperty = System.getProperty("yudao.file.return-relative-path");
        log.info("验证系统属性设置结果: {}", verifyProperty);

        log.info("=== 文件服务配置初始化结束 ===");
    }
}
